<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>模板标签帮助</title>
  <style>
  body{font-size:12px;}
  table{font-size:12px;}
  </style>
 </head>
 <body>
 <table width="100%" border="0">
                <tbody>
                    <tr>
                        <td>
                        <table cellspacing="2" cellpadding="3" width="100%" align="center" bgcolor="#ececec" border="0">
                            <tbody>
                                <tr>
                                    <td bgcolor="#ffffff" height="25">
                                    <p><font color="#003399"><strong>KnifeCMS模板制作说明</strong></font></p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                    <tr>
                        <td>
                        <table cellspacing="2" cellpadding="3" width="100%" align="center" bgcolor="#ececec" border="0">
                            <tbody>
                                <tr>
                                    <td bgcolor="#ffffff" height="25">
                                    <p><font color="#003399"><strong><a name="intro"></a>一、基本语法</strong></font></p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                    <tr bgcolor="#f6f6f4">
                        <td valign="top" align="left" bgcolor="#f6f6f4">
                        <div align="left"><strong>1、&quot;#&quot;用来标识Velocity的脚本语句</strong>，包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等；<br />
                        如:<br />
                        #if($info.imgs)<br />
                        	&lt;img border="0" alt="" src="$info.imgs" /&gt;<br />
                        #else<br />
                        	&lt;img alt="" src="noPhoto.jpg" /&gt;<br />
                        #end<br />
                        <br />
                        <strong>2、&quot;$&quot;用来标识一个对象(或理解为变量)；</strong>如<br />
                        如：$i、$msg、$TagUtil.options(...)等。<br />
                        <br />
                        <strong>3、&quot;{}&quot;用来明确标识Velocity变量；</strong><br />
                        比如在页面中，页面中有一个$someonename，此时，Velocity将把someonename作为变量名，若我们程序是想在someone这个变量的后面紧接着显示name字符，则上面的标签应该改成${someone}name。<br />
                        <br />
                        <strong>4、&quot;!&quot;用来强制把不存在的变量显示为空白。</strong><br />
                        如当页面中包含$msg，如果msg对象有值，将显示msg的值，如果不存在msg对象同，则在页面中将显示$msg字符。这是我们不希望的，为了把不存在的变量或变量值为null的对象显示为空白，则只需要在变量名前加一个&ldquo;!&rdquo;号即可。<br />
                        如：$!msg</div>
                        <div>&nbsp;</div>
                        </td>
                    </tr>
                    <tr bgcolor="#f6f6f4">
                        <td>&nbsp;</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td valign="top">
            <table width="100%" border="0">
                <tbody>
                    <tr>
                        <td valign="top">
                        <table width="100%" border="0">
                            <tbody>
                                <tr>
                                    <td>
                                    <table cellspacing="2" cellpadding="3" width="100%" align="center" bgcolor="#ececec" border="0">
                                        <tbody>
                                            <tr>
                                                <td bgcolor="#ffffff" height="25">
                                                <p><font color="#003399"><strong><a name="intro"></a>二、在模板中的最佳实践</strong></font></p>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                    </td>
                                </tr>
                                <tr bgcolor="#f6f6f4">
                                    <td valign="top" align="left" bgcolor="#f6f6f4">
                                    <div align="left">&nbsp; 　　理论上你可以在KnifeCMS模板使用所有Velocity的脚本及功能，但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式，在万不得已的情况下，不要在界面模板中加入任何复杂的逻辑，更不要在界面模板中加入变量声明、逻辑运算符等等。
                                    <p>　　在KnifeCMS中，我们提供了五条基本的模板脚本语句，基本上就能满足所有应用模板的要求。这四条模板语句很简单，可以直接由界面设计人员来添加。在当前很多KnifeCMS的应用实践中，我们看到，所有界面模板中归纳起来只有下面四种简单模板脚本语句即可实现：<br />
                                    　　 <strong>1、$!obj 　直接返回对象结果。</strong><br />
                                    　　 如：在html标签中显示java对象msg的值。</p>
                                    <p>$!msg</p>
                                    <br />
                                    　 在html标签中显示经过HtmlUtil对象处理过后的msg对象的值　　
                                    <p>$!HtmlUtil.adSomething($!msg)</p>
                                    <p>&nbsp;</p>
                                    <p>　　<strong>2、#if($!obj) #else #end 判断语句</strong><br />
                                    　　 如：在KnifeCMS各种开源应用中，我们经常看到的用于弹出提示信息msg的例子。<br />
                                    　　 #if($msg)<br />
                                    　　 	&lt;script&gt;<br />
                                    　　		alert('$!msg');<br />
                                    　　 	&lt;/script&gt;<br />
                                    　　 #end<br />
                                    上面的脚本表示当对象msg对象存在时，输出script等后面的内容。</p>
                                    <p>　<strong>　3、#foreach( $info in $list) $info.someList #end</strong>　　<strong>循环读取集合list中的对象，并作相应的处理。</strong><br />
                                    　　 如：首页显示热门主题的html界面模板脚本：<br />
                                    　　#foreach( $info in $hotList1) <br />
                                    		&lt;a href="/news.ad?parameter=show&&cid=$!info.cid" target="_blank"&gt;$!info.title&lt;/a&gt;<br><br />
                                    　　　 #end <br />
                                    　　 上面的脚本表示循环遍历hotList1集合中的对象，并输出对象的相关内容。<br />
                                    　　 <br />
                                    　　 <strong>4、#macro(macroName)#end 脚本函数(宏)调用，不推荐在界面模板中大量使用。</strong><br />
                                    　　 如：在使用KnifeCMS Tools快速生成的添删改查示例中，可以点击列表的标题栏进行升降排序显示，这是我们在KnifeCMS应用中经常看到的一个排序状态显示的模板内容。<br />
                                    　　 函数(宏)定义，一般放在最前面<br />
                                    　　 #macro(orderPic $type)<br />
                                    　　 #if ($orderField.equals($type)) <br />
                                    　　 	&lt;img src="/images/ico/${orderType}.gif"&gt; <br />
                                    　　 #end<br />
                                    　　 #end<br />
                                    具体的调用如：<font color="#FFFFFF">头衔#orderPic("title")</font></p>
                                    <p>　　<strong>5、包含文件#inclue("模板文件名")或#parse("模板文件名")</strong><br />
                                    　　主要用于处理具有相同内容的页面，比如每个网站的顶部或尾部内容。<br />　
                                    　　如：#parse("/blog/top.html")或#include("/blog/top.html")<br />
                                    　　parse与include的区别在于，若包含的文件中有Velocity脚本标签，将会进一步解析，而include将原样显示。</p>
                                    </div>
                                    <div> </div>
                                    </td>
                                </tr>
                                <tr bgcolor="#f6f6f4">
                                    <td> </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                    <tr>
                        <td valign="top">
                        <table width="100%" border="0">
                            <tbody>
                                <tr>
                                    <td>
                                    <table cellspacing="2" cellpadding="3" width="100%" align="center" bgcolor="#ececec" border="0">
                                        <tbody>
                                            <tr>
                                                <td bgcolor="#ffffff" height="25">
                                                <p><font color="#003399"><strong><a name="intro"></a>三、关于#set的使用</strong></font></p>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                    </td>
                                </tr>
                                <tr bgcolor="#f6f6f4">
                                    <td valign="top" align="left" bgcolor="#f6f6f4">
                                    <div align="left">　　在万不得已的时候，不要在页面视图自己声明Velocity脚本变量，也就是尽量少使用#set。有时候我们需要在页面中显示序号，而程序对象中又没有包含这个序号属性同，可以自己定义。如在一个循环体系中，如下所示：<br />
                                    　　#set ($i=0)<br />
                                    　　#foreach($info in $list)<br />
                                    　　序号:$i<br />
                                    　　#set($i=$i+1)<br />
                                    　　#end<br />
                                    　</div>
                                    <div> </div>
                                    </td>
                                </tr>
                                <tr bgcolor="#f6f6f4">
                                    <td> </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                    <tr>
                        <td valign="top">
                        <table width="100%" border="0">
                            <tbody>
                                <tr>
                                    <td>
                                    <table cellspacing="2" cellpadding="3" width="100%" align="center" bgcolor="#ececec" border="0">
                                        <tbody>
                                            <tr>
                                                <td bgcolor="#ffffff" height="25">
                                                <p><font color="#003399"><strong><a name="intro"></a>四、Velocity脚本语法摘要</strong></font></p>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                    </td>
                                </tr>
                                <tr bgcolor="#f6f6f4">
                                    <td valign="top" align="left" bgcolor="#f6f6f4">
                                    <div align="left"><strong>1、声明:#set ($var=XXX)</strong><br />
                                    　　左边可以是以下的内容<br />
                                    　　Variable reference <br />
                                    　　String literal <br />
                                    　　Property reference <br />
                                    　　Method reference <br />
                                    　　Number literal #set ($i=1) <br />
                                    　　ArrayList #set ($arr=["yt1","t2"])<br />
                                    　　算术运算符<br />
                                    <br />
                                    <strong>2、注释:</strong><br />
                                    　　单行## XXX<br />
                                    　　多行#* xxx<br />
                                    　　xxxx<br />
                                    　　xxxxxxxxxxxx*#<br />
                                    <br />
                                    　　References 引用的类型<br />
                                    <strong>3、变量 Variables</strong> <br />
                                    　　以 "$" 开头，第一个字符必须为字母。character followed by a VTL Identifier. (a .. z or A .. Z).<br />
                                    　　变量可以包含的字符有以下内容：<br />
                                    　　alphabetic (a .. z, A .. Z) <br />
                                    　　numeric (0 .. 9) <br />
                                    　　hyphen ("-") <br />
                                    　　underscore ("_") <br />
                                    <br />
                                    <strong>4、Properties</strong> <br />
                                    　　$Identifier.Identifier<br />
                                    　　$user.name<br />
                                    　　hashtable user中的的name值.类似：user.get("name")<br />
                                    <br />
                                    <strong>5、Methods </strong><br />
                                    　　object user.getName() = $user.getName()<br />
                                    <br />
                                    <strong>6、Formal Reference Notation</strong> <br />
                                    　　用{}把变量名跟字符串分开 <br />
                                    <br />
                                    　　如<br />
                                    　　#set ($user="csy"}<br />
                                    　　${user}name <br />
                                    　　返回csyname<br />
                                    <br />
                                    　　$username<br />
                                    　　$!username<br />
                                    　　$与$!的区别<br />
                                    　　当找不到username的时候，$username返回字符串"$username"，而$!username返回空字符串"" <br />
                                    <br />
                                    <strong>7、双引号 与 引号</strong> <br />
                                    　　#set ($var="helo")<br />
                                    　　test"$var" 返回testhello<br />
                                    　　test'$var' 返回test'$var'<br />
                                    　　可以通过设置 stringliterals.interpolate=false改变默认处理方式<br />
                                    <br />
                                    <strong>8、条件语句</strong><br />
                                    　　#if( $foo ) <br />
                                    　　 <strong>Velocity!</strong><br />
                                    　　#end<br />
                                    　　#if($foo)<br />
                                    　　#elseif()<br />
                                    　　#else<br />
                                    　　#end<br />
                                    　　当$foo为null或为Boolean对象的false值执行.<br />
                                    <br />
                                    <strong>9、逻辑运算符:== && || !</strong><br />
                                    <br />
                                    <strong>10、循环语句#foreach($var in $arrays ) </strong>// 集合包含下面三种Vector, a Hashtable or an Array<br />
                                    #end<br />
                                    　　#foreach( $product in $allProducts )<br />
                                    　　 &lt;li&gt;$product&lt;/li&gt;<br />
                                    　　#end<br />
                                    <br />
                                    　　#foreach( $key in $allProducts.keySet() )<br />
                                    　　 &lt;li&gt;Key: $key -> Value: $allProducts.get($key)&lt;/li&gt;<br />
                                    　　#end<br />
                                    <br />
                                    　　#foreach( $customer in $customerList )<br />
                                    　　 &lt;tr&gt;&lt;td&gt;$velocityCount&lt;/td&gt;&lt;td&gt;$customer.Name&lt;/td&gt;&lt;/tr&gt;<br />
                                    　　#end<br />
                                    <br />
                                    <strong>11、velocityCount变量在配置文件中定义</strong><br />
                                    　　# Default name of the loop counter<br />
                                    　　# variable reference.<br />
                                    　　directive.foreach.counter.name = velocityCount<br />
                                    　　# Default starting value of the loop<br />
                                    　　# counter variable reference.<br />
                                    　　directive.foreach.counter.initial.value = 1<br />
                                    <br />
                                    <strong>12、包含文件</strong> <br />
                                    　　#include( "one.gif","two.txt","three.htm" )<br />
                                    <br />
                                    <strong>13、Parse导入脚本</strong><br />
                                    　　#parse("me.vm" )<br />
                                    <br />
                                    <strong>14、#stop 停止执行并返回</strong> <br />
                                    <br />
                                    <strong>15、定义宏Velocimacros ,相当于函数 支持包含功能</strong><br />
                                    　　#macro( d )<br />
                                    　　 <tr><td></td></tr><br />
                                    　　#end<br />
                                    　　调用 <br />
                                    　　#d()<br />
                                    <br />
                                    <strong>16、带参数的宏</strong><br />
                                    　　#macro( tablerows $color $somelist )<br />
                                    　　#foreach( $something in $somelist )<br />
                                    　　 &lt;tr&gt;&lt;td bgcolor=$color&gt;$something&lt;/td&gt;&lt;/tr&gt;<br />
                                    　　#end<br />
                                    　　#end<br />
                                    <br />
                                    <strong>17、Range Operator</strong> <br />
                                    　　#foreach( $foo in [1..5] )</div>
                                    <div> </div>
                                    </td>
                                </tr>
                                <tr bgcolor="#f6f6f4">
                                    <td> </td>
                                </tr>
                            </tbody>
                        </table>
 
 </body>
</html>
